package Character;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

public class Character {

    int x, dx, dy, y; //Definierar axlarna x och y, samt dx och dy, dvs ändring av position på dessa axlar.

    private boolean jumped = false; //Skapar en boolean med namnet 'jumped' och sätter den till false.

    Image still; //Definierar bilden som visas när karaktären står still.

    Image unstill; //Definierar bilden som visas när karaktären rör sig.

    Image current; //Definierar en "current" bild.
    
    private int gravityMod; //Definierar en int med namned gravityMod.

    public Character() {
   


        ImageIcon i = new ImageIcon("C:/Wheelchair1.png"); 
        still = i.getImage(); //När karaktären står still så hämtas bilden wheelchair 1.
        i = new ImageIcon("C:/Wheelchair2i.png");
        unstill = i.getImage(); //När karaktären rör sig så hämtas bilden wheelchair 2.
        current = still;
        x = 10;
        y = 172;
    }

    public void move() {
        x = x + dx;
        y = y + dy;
        
//Denna If-sats gör så att när karaktären är ovanför marken (marken ligger på 172) så skapas en "gravitation" med värdet 1.82. Detta är alltså när jumped = true. Annars är jumped = false, och då finns det ingen gravitation.
        if (y < 172) {
            dy += 1.82;
        } else {
            dy = 0;
            jumped = false;
        }

    }

    public int getX() { //Hämtar X-värdet på karaktären och skriver ut vart han är.
        return x;
    }

    public int getY() { //Samma som förra fast Y-värdet.
        return y;
    }

    public Image getImage() { //Hämtar den bild som visas just nu och skriver ut denna.
        return current;
    }
    long lastSwitch = System.currentTimeMillis(); //Skapar en metod 'lastSwitch' och hämtar datorns tidräknare.

//Metoden 'switchImage' skapar en If-sats där, om den nuvarande bilden är 'still' så byts den till 'unstill', detta kan den dock bara göra om det har gått minst 200 millisekunder sen senaste byte.
    public void switchImage() {
        if (lastSwitch < System.currentTimeMillis() - 200) {
            if (current == still) {
                current = unstill;
            } else {
                current = still;
            }
            lastSwitch = System.currentTimeMillis();
        }
    }
//Skapar ett keyevent som gör så att karaktären förflyttas åt vänster när man trycker på vänster piltangent. Samt anropar 'switchImage' metoden.
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_LEFT) {
            dx = -2;
            switchImage();
        }
//Samma som förra fast med höger piltangent och åt höger.
        if (key == KeyEvent.VK_RIGHT) {
            dx = 3;
            switchImage();
        }
//En If-sats som gör så att karaktären hoppar 18 högt, samt säger att, om karaktären hoppar så är jumped = true, detta kan dock bara hända när jumped = false.
        if (key == KeyEvent.VK_UP) {
            if (jumped == false) {
                dy = -18;
                jumped = true;
            }
        }



        if (key == KeyEvent.VK_ESCAPE) {
        }
    }
//Dessa if-satser gör så att gubben slutar röra sig när man släpper piltangenterna.
    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_RIGHT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_UP) {
            dy = 0;
        }


    }
}





